package com.yue.util;

import org.apache.commons.beanutils.BeanUtils;

import java.beans.PropertyDescriptor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;

/**
 * 功能描述: 通过反射调用Bean的set、get方法 <br/>
 * 创建时间: 2016/9/7<br/>
 *
 * @author QiuYang
 */
public class PropertyUtil {
    @SuppressWarnings("unchecked")
    public static <E> void setProperty(E e, String propertyName, Object args) {
        try {
//            PropertyDescriptor pd = new PropertyDescriptor(propertyName, e.getClass());
//            Method setMethod = pd.getWriteMethod();
//            setMethod.setAccessible(true);
//
//            setMethod.invoke(e, args);
            BeanUtils.setProperty(e, propertyName, args);
        } catch (Exception ex) {
            throw new RuntimeException(ex);
        }
    }

    @SuppressWarnings("unchecked")
    public static <E> Object getProperty(E e, String propertyName) {
        try {
//            PropertyDescriptor pd = new PropertyDescriptor(propertyName, e.getClass());
//            Method getMethod = pd.getReadMethod();//从属性描述器中获取 get 方法
//            getMethod.setAccessible(true);
//
//            Object value = getMethod.invoke(e);//调用方法获取方法的返回值
//            return value;
            return BeanUtils.getProperty(e, propertyName);
        } catch (Exception ex) {
            throw new RuntimeException(ex);
        }

    }
}
